//
//  WBStatusListViewModel.swift
//  DLSwift微博
//
//  Created by 丁浪涛 on 2016/11/14.
//  Copyright © 2016年 丁浪涛. All rights reserved.
//

import Foundation

//微博数据列表视图模型
/*
 父类的选择
 - 如果类需要使用KVC 或者字典转模型框架设置对象值 类就要继承字NSObject
 - 如果类只是包装代码逻辑。（只是写了一些代码逻辑） 就不需要写任何父类 。这样就比较轻量级
 - 提示：如果用OC写 一律都要继承自NSObject
 
 使命： 负责微博的数据处理
 */

//上拉刷新最大刷新次数
private let maxPullupTryTimes = 3
class WBStatusListViewModel {
    // 微博类型数组
    lazy  var statusList  = [WBStatus]()
    //上拉刷新错误次数
    private var pullupErrorTime = 0
    
    func loadStatus(pullup :Bool, completion: @escaping (_ isSuccess : Bool,_ hasMorePullup : Bool )->())
     {
        //判断是否是上拉刷新
        if pullup && pullupErrorTime > maxPullupTryTimes{
            completion(true,false)
            return
        }
    
        //since_id 取出数组中第一条微博id
        let since_id =   pullup ? 0: (self.statusList.first?.id ?? 0)
        
        let max_id = !pullup ? 0 : (self.statusList.last?.id ?? 0)
        WBNetWorkManager.shared.statusList(since_id: since_id,max_id: max_id) { (list ,isSuccess ) in
            //字典转模型
            guard  let  array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? [] ) as? [WBStatus]
            else
           {
                completion(isSuccess,false)
                return
            }
            //下拉刷新的数据条数
            print("更新下来 \(array.count) 条数据")
            
            if pullup
            {
                //上拉刷新
                self.statusList += array
            }
           else
            {
                //下拉刷新 应该把数据插入到最前面
                self.statusList = array+self.statusList
            }
            //判断上拉刷新的数据流
            
            if pullup && (array.count == 0){
                self.pullupErrorTime += 1
                completion(isSuccess,false )
            }
            else
            {
                completion(isSuccess,true)
            }
            
        }
    }
    
}
